﻿using Comm.PublicClass;
using System;
using System.Text;

namespace Wasion.Protocol.IEC62056
{
    public class EncryptHelper
    {
        //public int Encrypt_StringData(String pKey, String pIV, String pHDR, String pPlaintext, StringBuilder pOutPlaintext, StringBuilder pOutTag, ref string errorinfo)
        //{
        //    int rs = 0;
        //    if (pKey == null || pKey.Length != 16 * 2)
        //    {
        //        errorinfo =("Encrypt error: Key length error");
        //        return -1;
        //    }
        //    if (pIV == null || pIV.Length != 12 * 2)
        //    {
        //        errorinfo =("Encrypt error: IV length error");
        //        return -1;
        //    }
        //    //if (pPlaintext == null || pPlaintext.length() == 0)
        //    //	return rs;
        //    try
        //    {
        //        System.Security.Cryptography.aes
        //        //传入秘钥只能是 128  192  256字节
        //        byte[] ivpar = MyConvert.HexStringToByteArray(pIV);  //57534500000000010123458D
        //        GCMParameterSpec iv = new GCMParameterSpec(96, ivpar);

        //        SecretKeySpec key = new SecretKeySpec(MyConvert.HexStringToByteArray(pKey), "AES");

        //        Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");  //	    	

        //        byte[] input = MyConvert.HexStringToByteArray(pPlaintext);  //01000000065F1F0400007E1F0000

        //        cipher.init(Cipher.ENCRYPT_MODE, key, iv); //

        //        if (pHDR != null && pHDR.Length > 0)
        //            cipher.updateAAD(MyConvert.HexStringToByteArray(pHDR));

        //        byte[] result = cipher.doFinal(input);
        //        //
        //        System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
        //        {
        //            Key = Encoding.UTF8.GetBytes(key),
        //            Mode = System.Security.Cryptography.CipherMode.ECB,
        //            Padding = System.Security.Cryptography.PaddingMode.PKCS7
        //        };

        //        String enc = MyConvert.ByteArrayToHexString(result);  //取到加密后的字符串  1891D382754AD091C61AC728714C   046749685DB619697479E143  B7BCEBF2
        //        if (enc == null || enc.Length == 0)
        //            return -1;
        //        pOutPlaintext.Append(enc.Substring(0, pPlaintext.Length));

        //        enc = enc.Substring(pPlaintext.Length);  //取得Tag加密部分
        //                                                   //pOutTag.append(enc.substring(0, pIV.length()));
        //        pOutTag.Append(enc);
        //        rs = 1;
        //    }
        //    catch (Exception ex)
        //    {
        //        errorinfo = "Encrypt error:" + ex.Message;
        //        rs = -1;
        //    }

        //    return rs;
        //}
    }
}
